/**
 * 工作流相关类型定义
 */

// ==================== 流程定义相关 ====================

/**
 * 流程定义（模型）
 */
export interface ProcessDefinition {
  /** 流程定义ID */
  id?: string;
  /** 流程定义Key（唯一标识） */
  key?: string;
  /** 流程名称 */
  name?: string;
  /** 流程描述 */
  description?: string;
  /** 流程分类 */
  category?: string;
  /** 版本号 */
  version?: number;
  /** 部署ID */
  deploymentId?: string;
  /** 资源名称 */
  resourceName?: string;
  /** BPMN XML内容 */
  bpmnXml?: string;
  /** 流程图SVG */
  diagramSvg?: string;
  /** 是否已挂起 */
  suspended?: boolean;
  /** 创建时间 */
  deploymentTime?: string;
  /** 更新时间 */
  updateTime?: string;
  /** 租户ID */
  tenantId?: string;
}

/**
 * 流程模型
 */
export interface ProcessModel {
  /** 模型ID */
  id?: string;
  /** 模型Key */
  key?: string;
  /** 模型名称 */
  name?: string;
  /** 模型描述 */
  description?: string;
  /** 模型分类 */
  category?: string;
  /** 版本号 */
  version?: number;
  /** BPMN XML */
  bpmnXml?: string;
  /** 创建人 */
  createBy?: string;
  /** 创建时间 */
  createTime?: string;
  /** 更新人 */
  updateBy?: string;
  /** 更新时间 */
  updateTime?: string;
}

// ==================== 流程部署相关 ====================

/**
 * 流程部署
 */
export interface ProcessDeployment {
  /** 部署ID */
  id?: string;
  /** 部署名称 */
  name?: string;
  /** 部署时间 */
  deploymentTime?: string;
  /** 分类 */
  category?: string;
  /** 租户ID */
  tenantId?: string;
  /** 包含的流程定义列表 */
  processDefinitions?: ProcessDefinition[];
}

// ==================== 流程实例相关 ====================

/**
 * 流程实例
 */
export interface ProcessInstance {
  /** 流程实例ID */
  id?: string;
  /** 流程定义ID */
  processDefinitionId?: string;
  /** 流程定义Key */
  processDefinitionKey?: string;
  /** 流程定义名称 */
  processDefinitionName?: string;
  /** 流程定义版本 */
  processDefinitionVersion?: number;
  /** 业务Key */
  businessKey?: string;
  /** 流程实例名称 */
  name?: string;
  /** 发起人 */
  startUserId?: string;
  /** 发起人名称 */
  startUserName?: string;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
  /** 持续时间（毫秒） */
  duration?: number;
  /** 流程状态：running-运行中, completed-已完成, suspended-已挂起 */
  state?: 'running' | 'completed' | 'suspended';
  /** 是否已挂起 */
  suspended?: boolean;
  /** 租户ID */
  tenantId?: string;
  /** 流程变量 */
  variables?: Record<string, any>;
  /** 当前节点 */
  currentActivities?: ActivityInstance[];
}

/**
 * 活动实例（节点）
 */
export interface ActivityInstance {
  /** 活动ID */
  id?: string;
  /** 活动名称 */
  name?: string;
  /** 活动类型 */
  type?: string;
  /** 执行ID */
  executionId?: string;
  /** 任务ID */
  taskId?: string;
  /** 办理人 */
  assignee?: string;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
}

// ==================== 任务相关 ====================

/**
 * 用户任务
 */
export interface UserTask {
  /** 任务ID */
  id?: string;
  /** 任务名称 */
  name?: string;
  /** 任务描述 */
  description?: string;
  /** 流程实例ID */
  processInstanceId?: string;
  /** 流程定义ID */
  processDefinitionId?: string;
  /** 流程定义Key */
  processDefinitionKey?: string;
  /** 流程定义名称 */
  processDefinitionName?: string;
  /** 任务定义Key */
  taskDefinitionKey?: string;
  /** 办理人 */
  assignee?: string;
  /** 办理人名称 */
  assigneeName?: string;
  /** 候选人 */
  candidateUsers?: string[];
  /** 候选组 */
  candidateGroups?: string[];
  /** 创建时间 */
  createTime?: string;
  /** 到期时间 */
  dueDate?: string;
  /** 优先级 */
  priority?: number;
  /** 是否已挂起 */
  suspended?: boolean;
  /** 业务Key */
  businessKey?: string;
  /** 发起人 */
  startUserId?: string;
  /** 发起人名称 */
  startUserName?: string;
  /** 任务变量 */
  variables?: Record<string, any>;
  /** 表单Key */
  formKey?: string;
}

/**
 * 历史任务
 */
export interface HistoricTask {
  /** 任务ID */
  id?: string;
  /** 任务名称 */
  name?: string;
  /** 流程实例ID */
  processInstanceId?: string;
  /** 流程定义名称 */
  processDefinitionName?: string;
  /** 办理人 */
  assignee?: string;
  /** 办理人名称 */
  assigneeName?: string;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
  /** 持续时间（毫秒） */
  duration?: number;
  /** 删除原因 */
  deleteReason?: string;
  /** 审批意见 */
  comment?: string;
  /** 审批结果 */
  outcome?: string;
}

/**
 * 任务处理表单
 */
export interface TaskCompleteForm {
  /** 任务ID */
  taskId: string;
  /** 审批意见 */
  comment?: string;
  /** 流程变量 */
  variables?: Record<string, any>;
  /** 审批结果（通过/拒绝等） */
  outcome?: string;
}

// ==================== 流程历史相关 ====================

/**
 * 历史活动
 */
export interface HistoricActivity {
  /** 活动ID */
  id?: string;
  /** 活动名称 */
  activityName?: string;
  /** 活动类型 */
  activityType?: string;
  /** 流程实例ID */
  processInstanceId?: string;
  /** 执行ID */
  executionId?: string;
  /** 任务ID */
  taskId?: string;
  /** 办理人 */
  assignee?: string;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
  /** 持续时间 */
  duration?: number;
}

// ==================== 查询参数相关 ====================

/**
 * 流程定义查询参数
 */
export interface ProcessDefinitionQuery {
  /** 流程Key */
  key?: string;
  /** 流程名称 */
  name?: string;
  /** 分类 */
  category?: string;
  /** 是否挂起 */
  suspended?: boolean;
  /** 页码 */
  pageNum?: number;
  /** 每页数量 */
  pageSize?: number;
}

/**
 * 流程实例查询参数
 */
export interface ProcessInstanceQuery {
  /** 流程定义Key */
  processDefinitionKey?: string;
  /** 流程名称 */
  processDefinitionName?: string;
  /** 业务Key */
  businessKey?: string;
  /** 发起人 */
  startUserId?: string;
  /** 状态 */
  state?: string;
  /** 开始时间-起 */
  startTimeBegin?: string;
  /** 开始时间-止 */
  startTimeEnd?: string;
  /** 页码 */
  pageNum?: number;
  /** 每页数量 */
  pageSize?: number;
}

/**
 * 任务查询参数
 */
export interface TaskQuery {
  /** 任务名称 */
  name?: string;
  /** 流程定义Key */
  processDefinitionKey?: string;
  /** 流程定义名称 */
  processDefinitionName?: string;
  /** 办理人 */
  assignee?: string;
  /** 候选人 */
  candidateUser?: string;
  /** 候选组 */
  candidateGroup?: string;
  /** 创建时间-起 */
  createTimeBegin?: string;
  /** 创建时间-止 */
  createTimeEnd?: string;
  /** 页码 */
  pageNum?: number;
  /** 每页数量 */
  pageSize?: number;
}

